import ApiClient from '@/api/apiClient';

import type { RequestBody } from 'alova';

/**
 * SysRole对象，角色表
 */
export interface SysRoleItem {
  /**
   * 创建人
   */
  createBy?: string;
  /**
   * 创建人id
   */
  createId?: number;
  /**
   * 创建时间
   */
  createTime?: string;
  /**
   * 描述
   */
  description?: string;
  /**
   * 主键
   */
  id?: number;
  /**
   * 是否逻辑删除，0否,其他是
   */
  isDelete?: number;
  /**
   * 角色名称
   */
  name?: string;
  /**
   * 资源编号列表
   */
  permissionIds?: string;
  /**
   * 状态 1.正常 0.禁用
   */
  status?: number;
  /**
   * 租户编号
   */
  tenantId?: number;
  /**
   * 修改人
   */
  updateBy?: string;
  /**
   * 修改人id
   */
  updateId?: number;
  /**
   * 更新时间
   */
  updateTime?: string;
  /**
   * 乐观锁版本号
   */
  version?: number;
}

/**
 * 权限树
 */
export interface PermissionTreeItem {
  children?: PermissionTreeItem[];
  config?: string;
  icon?: string;
  id?: number;
  name?: string;
  parentId?: number;
  parentIds?: string;
  permission?: string;
  sort?: number;
  status?: number;
  type?: number;
}

/** 获取角色列表 */
export const systemRoleListApi = (data: RequestBody) => {
  return ApiClient.Post<API.ListType<SysRoleItem>>('/role/page', data, {
    meta: { auth: true },
  });
};

/** 保存或修改角色 */
export const systemRoleSaveOrUpdateApi = (data: Merge<RequestBody, SysRoleItem>) => {
  return ApiClient.Post(`/role/${data.id ? 'update' : 'save'}`, data, {
    meta: { auth: true },
  });
};

/** 获取所有角色列表 */
export const systemRoleAllListApi = () => {
  return ApiClient.Get<SysRoleItem[]>('/role/roleList', {
    meta: { auth: true },
  });
};

/** 删除角色 */
export const systemRoleDeleteApi = (data: Merge<RequestBody, { id: number }>) => {
  return ApiClient.Get(`/role/del?roleId=${data.id}`, {
    meta: { auth: true },
  });
};

/** 查询权限树 */
export const systemRolePermissionTreeApi = () => {
  return ApiClient.Get<PermissionTreeItem>('/role/queryPermissionTree', {
    meta: { auth: true },
  });
};
